package br.com.saeng2D.util;

import static java.lang.Math.PI;

//Representacao de um Vetor
public class Vetor {
	private final double fvf = PI / 180;
	public float x;
	public float y;
	
	public Vetor(float x, float y) {
		this.x = x;
		this.y = y;
	}
	
	public void rotacionar(int grau) {
		double cos = Math.cos(grau * fvf);
		double sen = Math.sin(grau * fvf);
		double novoX = x * cos - y * sen;
		double novoY = x * sen + y * cos;
		x = (float) novoX;
		y = (float) novoY;
	}
	
	public Vetor clonar() {
		return new Vetor(x, y);
	}
	
	public P2D criarP2D() {
		return new P2D(Math.round(x), Math.round(y));
	}
	
	public double getComprimento() {
		return Math.sqrt(x * x + y * y);
	}

	public void normalizar() {
		double comprimento = getComprimento();
		x = (float)(x / comprimento);
		y = (float)(y / comprimento);
	}

	public static double converterParaRadiano(int grau) {
		return grau * PI / 180;
	}
	
	public static double converterParaGrau(double radiano) {
		return radiano * 180 / PI;  
	}
	
	public void alterarTamanho(int valor) {
		normalizar();
		x = x * valor;
		y = y * valor;
	}

//	public static void main(String[] args) {
//		Vetor v = new Vetor(100, 0);
//		v.rotacionar(90);
//		Vetor u = new Vetor(10, 0);
//		System.out.println(u.diferencaEmGraus(v));
//	}
	
	public double diferencaEmRadianos(Vetor outro) {
		double prodEscalar = produtoEscalar(outro);
		double prodModulos = getComprimento() * outro.getComprimento();
		double auxCalculo = prodEscalar / prodModulos;
		return Math.acos(auxCalculo);
	}
	
	public double diferencaEmGraus(Vetor outro) {
		return converterParaGrau(diferencaEmRadianos(outro));
	}
	
	public double produtoEscalar(Vetor outro) {
		return x * outro.x + y * outro.y;
	}
	
	public float getX() {
		return x;
	}

	public void setX(float x) {
		this.x = x;
	}

	public float getY() {
		return y;
	}

	public void setY(float y) {
		this.y = y;
	}	
	
	public String toString() {
		return "Vetor[x=" + x + ", y=" + y + "]";
	}
}